<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 如何判断内存不会被使用了=>垃圾回收算法
        // 1. 引用计数法 （淘汰）
        // 2. 标记清除法 （主流）

        // 引用计数法
        // 1. 跟踪记录每个值被引用的次数
        // 2. 如果这个值被引用了一次，那么就记录次数1
        // 3. 多次引用会累加
        // 4. 如果减少一个引用就减少1
        // 5. 如果引用次数是0，则释放内存
        //   const person = {
        //     name: '黑马',
        //     age: 20,
        //   }
        //   const p = person
        //   person = 1
        //   p = null

        // 缺陷：循环引用：
        //  堆内存空间中的对象 互相引用，计数永远不能为0，无法被回收，内存泄漏
        function fn() {
            let a = {}
            let b = {}
            a.xx = b
            b.yy = a
        }
        fn()
    </script>
</body>

</html>